package com.yidu.hbatsams.service.Impl;

import com.github.pagehelper.PageHelper;
import com.yidu.hbatsams.dao.*;
import com.yidu.hbatsams.domain.*;
import com.yidu.hbatsams.domain.vo.UserVo;
import com.yidu.hbatsams.service.UserService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * @描述: 用户service层
 * @author: 梁海长
 * @date: 2019-12-02 15:20
 */

@Service
public class UserServiceImpl implements UserService {
    //注入用户
    @Resource
    UserMapper userMapper;
    //注入用户角色关联
    @Resource
    UserRoleMapper userRoleMapper;
    //注入角色
    @Resource
    RoleMapper roleMapper;
    //注入运动员
    @Resource
    AtsEmpAthleteMapper atsEmpAthleteMapper ;
    //注入专家
    @Resource
    AtsEmpExpertMapper atsEmpExpertMapper ;
    //注入中心领导
    @Resource
    AtsEmpLeaderMapper atsEmpLeaderMapper ;
    //注入教练
    @Resource
    AtsEmpCoachMapper atsEmpCoachMapper ;

    /**
     * 查询全部方法
     * @param pageNum
     * @param pageSize
     * @param userName
     * @return
     */
    @Override
    public List<User> findAll(Integer pageNum, Integer pageSize , String userName) {

        //分页
        PageHelper.startPage(pageNum,pageSize);
        //调用查询所有的方法
        List<User> list = userMapper.findAll(userName);

        return list;
    }

    /**
     * 查询行数
     * @param userName
     * @return
     */
    @Override
    public int count(String userName) {


        return userMapper.count(userName);
    }

    /**
     * 增加方法
     * @param vo
     */
    @Override
    public void add(UserVo vo) {
        //新建一个用户
        User user=new User();
        //将用户状态改为有效
        vo.setUserValidity("有效");
        //新建一个时间
        Date date = new Date();
        //更换时间格式
        SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
        //得到一个UUID
        String uuid = UUID.randomUUID().toString().replaceAll("-","");
        //给用户id赋值
        vo.setUserId(uuid);
        //给用户创建时间赋值
        vo.setUserTime(dateFormat.format(date));
        //复制
        BeanUtils.copyProperties(vo,user);
        //判断用户类型是否为1
        if(user.getCompanyId().equals("1")){
            //调用领导表中的根据id查询方法
            AtsEmpLeader atsEmpLeader = atsEmpLeaderMapper.selectByPrimaryKey(Integer.valueOf(user.getClerkId()));
            //给用户类型赋值
            user.setCompanyName("领导");
            //给用户名称赋值
            user.setClerkName(atsEmpLeader.getLeaderName());
        }else if(user.getCompanyId().equals("2")){
            //调用教练表中的根据id查询方法
            AtsEmpCoach atsEmpCoach = atsEmpCoachMapper.selectByPrimaryKey(Integer.valueOf(user.getClerkId()));
            user.setClerkName(atsEmpCoach.getCoachName());
            user.setCompanyName("教练员");
        }else if(user.getCompanyId().equals("3")){
            //调用专家表中根据id查询的方法
            AtsEmpExpert atsEmpExpert = atsEmpExpertMapper.selectByPrimaryKey(Integer.valueOf(user.getClerkId()));
            user.setClerkName(atsEmpExpert.getExpertName());
            user.setCompanyName("专家");
        }else if(user.getCompanyId().equals("4")){
            //调用运动员表中根据id查询的方法
            AtsEmpAthlete atsEmpAthlete = atsEmpAthleteMapper.selectByPrimaryKey(Integer.valueOf(user.getClerkId()));
            user.setClerkName(atsEmpAthlete.getAthleteName());
            user.setCompanyName("运动员");
        }
        //调用用户表中的增加方法
        userMapper.add(user);
        //判断如果用户中的角色id不等于空
        if(vo.getRoleId()!=null && !"".equals(vo.getRoleId())) {
            //将角色id根据两个逗号进行分割并得到它的第一位
            String str = vo.getRoleId().split(",,")[0];
            //将分割后的值再次分割并用数组保存
            String[] id = str.split(",");
            //循环该数字
            for (int i = 0; i < id.length; i++) {
                //新建一个用户角色关联表
                UserRole userRole = new UserRole();
                //获得一个UUID
                String uid = UUID.randomUUID().toString().replaceAll("-","");
                //给用户角色关联表中的id赋值
                userRole.setUserRoleId(uid);
                //给用户角色关联表中的用户id赋值
                userRole.setUserId(user.getUserId());
                //给用户角色关联表中的角色id赋值
                userRole.setRoleId(id[i]);
                //调用用户角色关联 表中的增加方法
                userRoleMapper.add(userRole);
            }
        }


    }

    /**
     * 删除方法
     * @param uservo
     */
    @Override
    public void delete(UserVo uservo) {
        //调用用户表中的根据id查询的方法
        User user =  userMapper.findById(uservo.getUserId());
        //将用户状态改为无效
        user.setUserValidity("无效");
        //调用修改方法
        userMapper.update(user);
        //调用用户角色关联表中的根据用户id的方法
        userRoleMapper.deleteUserId(uservo.getUserId());



    }

    /**
     * 修改方法
     * @param vo
     */
    @Override
    public void update(UserVo vo) {
        //得到用户状态
        String str = vo.getUserValidity();
        //将用户状态改为有效
        vo.setUserValidity("有效");
        //调用用户表中的根据id查询数据的方法
        User users =  userMapper.findById(vo.getUserId());
        //给用户表的时间赋值
        vo.setUserTime(users.getUserTime());
        //判断如果用户的图片等于空
        if(vo.getUserImg()==null || vo.getUserImg().equals("")) {
            //给用户图片赋值
            vo.setUserImg(users.getUserImg());
        }
        //复制
        BeanUtils.copyProperties(vo,users);
        //判断如果用户类型等于一
        if(users.getCompanyId().equals("1")){
            //调用领导表中的根据id查询的方法
            AtsEmpLeader atsEmpLeader = atsEmpLeaderMapper.selectByPrimaryKey(Integer.valueOf(users.getClerkId()));
            //给用户类型名称赋值
            users.setCompanyName("领导");
            //给用户名称赋值
            users.setClerkName(atsEmpLeader.getLeaderName());
        }else if(users.getCompanyId().equals("2")){
            //调用教练表中的根据id查询数据的方法
            AtsEmpCoach atsEmpCoach = atsEmpCoachMapper.selectByPrimaryKey(Integer.valueOf(users.getClerkId()));
            users.setClerkName(atsEmpCoach.getCoachName());
            users.setCompanyName("教练员");
        }else if(users.getCompanyId().equals("3")){
            //调用专家表中根据id查询方法
            AtsEmpExpert atsEmpExpert = atsEmpExpertMapper.selectByPrimaryKey(Integer.valueOf(users.getClerkId()));
            users.setClerkName(atsEmpExpert.getExpertName());
            users.setCompanyName("专家");
        }else if(users.getCompanyId().equals("4")){
            //调用运动员表中根据id查询的方法
            AtsEmpAthlete atsEmpAthlete = atsEmpAthleteMapper.selectByPrimaryKey(Integer.valueOf(users.getClerkId()));
            users.setClerkName(atsEmpAthlete.getAthleteName());
            users.setCompanyName("运动员");
        }
            //调用用户表中的修改方法
            userMapper.update(users);
            //判断如果用户id不等于空
            if(users.getUserId()!=null && !"".equals(users.getUserId())) {
                //调用用户角色关联表中的根据用户id查询的方法
                List<UserRole> list = userRoleMapper.findUserId(users.getUserId());
                //循环数据
                for (int i = 0; i < list.size(); i++) {
                    //调用用户角色表中的删除方法
                    userRoleMapper.delete(list.get(i).getUserRoleId());
                }
            }
            //判断如果用户中的角色id不等于空
            if(vo.getRoleId()!=null && !"".equals(vo.getRoleId())) {
                //先行分割得到前面的字符创
                String strs = vo.getRoleId().split(",,")[0];
                //再次分割并用数组保存
                String[] id = strs.split(",");
                //循环该数组
                for (int i = 0; i < id.length; i++) {
                    //调用角色表中的根据id查询的方法
                    Role role = roleMapper.findById(id[i]);
                    //新建一个用户角色关联表
                    UserRole userRole = new UserRole();
                    //获得一个UUID
                    String uuid = UUID.randomUUID().toString().replaceAll("-", "");
                    //给用户角色关联表id赋值
                    userRole.setUserRoleId(uuid);
                    //给用户角色关联表的用户id赋值
                    userRole.setUserId(users.getUserId());
                    //给用户角色关联表的角色id赋值
                    userRole.setRoleId(role.getRoleId());
                    //调用用户角色关联标的增加方法
                    userRoleMapper.add(userRole);
                }
            }

    }

    /**
     * 根据id查询数据
     * @param id
     * @return
     */
    @Override
    public UserVo findById(String id) {
        //调用用户表的根据id查询的方法
        User po= userMapper.JfindByID(id);
        //新建一个用户VO类
        UserVo vo=new UserVo();
        //复制
        BeanUtils.copyProperties(po,vo);
        //调用用户角色关联表的根据用户id查询的方法
        List<UserRole> list = userRoleMapper.findUserId(vo.getUserId());
        //新建一个空的字符串类型
        String ids = "";
        //循环集合
        for (int i = 0; i < list.size(); i++) {
            //字符串得到角色id
            ids += list.get(i).getRoleId()+",";
        }
        //给角色id赋值
        vo.setRoleId(ids);

        return vo;
    }

    /**
     * 查询全部数据
     * @param userVo
     * @return
     */
    @Override
    public UserVo findAllUser(UserVo userVo) {
        //新建一个用户
        User user = new User();
        //复制
        BeanUtils.copyProperties(userVo, user);
        //调用用户表中的查询全部数据方法
        List<User> list = userMapper.findAllUser(user);
        //新建一个用户VO层
        UserVo userVos = new UserVo();
        //判断如果集合大小大于0
        if(list.size()>0) {
            //得到第一数值
            User users = list.get(0);
            //复制
            BeanUtils.copyProperties(users, userVos);
        }
        //返回
        return userVos;
    }

    /**
     * 查询人员
     * @param id
     * @return
     */
    @Override
    public List findClert(String id) {
        //新建一个集合
        List list = new ArrayList();
        //判断如果id等于1
        if(id.equals("1")){
            //调用领导表的查询全部方法
            list = atsEmpLeaderMapper.selectAll(null,null,null);
        }else if(id.equals("2")){
            //调用教练表的查询全部方法
            list = atsEmpCoachMapper.selectAll(null,null,null);
        }else if(id.equals("3")){
            //调用专家表的查询全部方法
            list = atsEmpExpertMapper.selectAll(null,null,null);
        }else if(id.equals("4")){
            //调用运动员表的查询全部方法
            list= atsEmpAthleteMapper.selectAll();
        }
        return list;
    }


}
